#coding: utf-8
import urllib, urllib2
from BeautifulSoup import BeautifulStoneSoup as Soup

APPID = 'Your API KEY'

class Query(object):
    u"QuerySet에서 사용하는 객체"
    def __init__(self, item):
        self.name = item['name'] if 'name' in item else ''
        self.lat = item['latitude'] if 'latitude' in item else ''
        self.lon = item['longitude'] if 'longitude' in item else ''
    
    def __unicode__(self):
        return self.name

class YQuerySet(object):
    u"쿼리 결과를 받아서 사용하기 편한 형태로 가공한다" 
    def __init__(self, items=None):
        self.items = items
        
    def __iter__(self):
        return iter(self._get_data())
    
    def __unicode__(self):
        return self.items
    
    def _get_data(self):
        result_cache = []
        for item in self.items:
            result_cache.append(Query(item))
        return result_cache

class YMap(object):
    u"야후!맵API에 대한 요청과 응답을 사용자가 사용하기 쉽게 가공한다"
    def __init__(self):
        self.ymap_searchBaseUrl = 'http://kr.open.gugi.yahoo.com/service/poi.php?%s'
    
    def __unicode__(self):
        return self.ymap_searchBaseUrl
        
    def searchName_by_keyword(self, q, encoding='utf-8', results=10, output='xml', callback=''):
        u"""
        q 파라미터를 키워드로 각 파라미터값을 GET요청으로 구성해 지역이름에 대한 결과값을 돌려받는다.
                결과값은 쿼리URL, 총 검색된 아이템갯수, 실제아이템 사전 으로 구성된 리스트를 리턴한다.
        """
        values = {
                  'q':q.encode(encoding) if isinstance(q, unicode) else q,
                  'appid':APPID,
                  'encoding':encoding, 
                  'results':results, 
                  'output':output, 
                  'callback':callback
                  }
        query_url = self.ymap_searchBaseUrl %(urllib.urlencode(values))
        ymap_search = urllib2.urlopen(query_url)
        soup = Soup(ymap_search)
        
        itemList = []
        itemList.append(query_url)
        head = soup.find('head')
        if head.error.contents[0] > 0 or head.found.contents[0] > 0:
            for item in soup.findAll('item'):
                if item.contents:
                    itemDict = {}
                    itemDict['latitude'] = item.latitude.contents[0]
                    itemDict['longitude'] = item.longitude.contents[0]
                    itemDict['name'] = item.findNext('name').contents[0]
                    itemList.append(itemDict)
        return YQuerySet(itemList[1:])
    
    def get_distance(self, from_lat, from_lon, to_lat, to_lon):
        
        return 50
